ip_network
IPv4 and IPv6 network structs.
Usage
Add this to your Cargo.toml
:
[]
= "0.4"
this to your crate root (not necessary when your project is Rust 2018 edition):
extern crate ip_network;
and then you can use it like this:
use Ipv4Addr;
use Ipv4Network;
let ip_network = new?;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
Minimal required version of Rust compiler is:
- 1.31 for version 0.3 and newer (because of 2018 edition),
- 1.26 for version 0.2 (because of support u128 data type),
- for older compiler you can use 0.1 version.
Optional features
When using this crate, you can choose to compile with these features:
Serde support
To enable serialization and deserialization by Serde framework,
just add serde
feature to package in your Cargo.toml
:
[]
= { = "0.4", = ["serde"] }
Diesel support
To enable support for diesel CIDR type for PostgreSQL,
just add diesel
feature to package in your Cargo.toml
:
[]
= { = "0.4", = ["diesel"] }
You can then use ip_network::diesel_support::PqCidrExtensionMethods
trait for CIDR operators support.
Postgres support
To enable support for postgres crate CIDR type,
just add postgres
feature to package in your Cargo.toml
:
[]
= { = "0.4", = ["postgres"] }
Comparison with ipnetwork
crate
Similar functionality also provides ipnetwork crate. This table shows the differences between these two crates:
Feature | ip_network | ipnetwork |
---|---|---|
IPv4 | ✓ | ✓ |
IPv6 | ✓ | ✓ |
IPv4 and IPv6 enum | ✓ | ✓ |
IPv4 network types | ✓ | |
IPv6 network types | ✓ | |
Hosts iterator | ✓ | ✓ |
Subnetworks iterator | ✓ | |
Check host bits set | ✓ | |
Serde | ✓ | ✓ |
Serde binary | ✓ | |
Diesel CIDR | ✓ | ✓ |
Diesel operators | ✓ | |
Postgres CIDR | ✓ | |
IPv4 string parsing | 65 ns | 379 ns |
IPv6 string parsing | 126 ns | 434 ns |
IPv4 contains method | 7 ns | 15 ns |
IPv6 contains method | 28 ns | 49 ns |